HAL IRDA I/O operations migration

This section provides information about the HAL IRDA I/O operations migration.

Important

In HAL2, the IRDA driver is removed, and IRDA functionalities are integrated within the HAL UART driver.

Note

The main difference between HAL1 and HAL2 in all transmit and receive functions (polling, interrupt, or DMA) is the way buffer size is specified. HAL1 uses Size for the number of data elements (u8 or u16), while HAL2 uses Size_byte to specify the buffer size in bytes, allowing more precise control.

Process polling

Function

HAL1 / HAL2

Transmit

HAL1:  HAL_IRDA_Transmit(IRDA_HandleTypeDef *hirda, const uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL2:  HAL_UART_Transmit(hal_uart_handle_t  *huart, const void *p_data,   uint32_t size_byte, uint32_t timeout_ms)

Receive

HAL1:  HAL_IRDA_Receive(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL2:  HAL_UART_Receive(hal_uart_handle_t *huart, void *p_data, uint32_t size_byte, uint32_t timeout_ms)

Related use cases: Use case: IRDA communication in polling mode


Process IT

Function

HAL1 / HAL2

Transmit IT

HAL1:  HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, const uint8_t *pData, uint16_t Size)
HAL2:  HAL_UART_Transmit_IT(hal_uart_handle_t *huart, const void *p_data,   uint32_t size_byte)

Receive IT

HAL1:  HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
HAL2:  HAL_UART_Receive_IT(hal_uart_handle_t *huart, void *p_data,   uint32_t size_byte)

Related use cases: Use case: IRDA transmit in interrupt mode and Use case: IRDA receive in interrupt mode


Process DMA

Function

HAL1 / HAL2

Transmit DMA

HAL1:  HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, const uint8_t *pData, uint16_t Size)
HAL2:  HAL_UART_Transmit_DMA(hal_uart_handle_t *huart, const void *p_data,   uint32_t size_byte)

Receive DMA

HAL1:  HAL_IRDA_Receive_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
HAL2:  HAL_UART_Receive_DMA(hal_uart_handle_t *huart, void *p_data,   uint32_t size_byte)

Pause DMA

HAL1: HAL_IRDA_DMAPause(IRDA_HandleTypeDef *hirda)
HAL2: HAL_UART_Pause_DMA(hal_uart_handle_t *huart)

Resume DMA

HAL1:  HAL_IRDA_DMAResume(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_Resume_DMA(hal_uart_handle_t *huart)

Related use cases: Use case: IRDA transmit in DMA mode and Use case: IRDA receive in DMA mode

DMA stop

HAL1

HAL2

HAL_IRDA_DMAStop(IRDA_HandleTypeDef *hirda)

Removed in HAL2

This function’s functionality is already covered by HAL_UART_Abort_IT().


Transfer abort

Function

HAL1 / HAL2

Abort

HAL1:  HAL_IRDA_Abort(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_Abort(hal_uart_handle_t *huart)

Abort Transmit

HAL1:  HAL_IRDA_AbortTransmit(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_AbortTransmit(hal_uart_handle_t *huart)

Abort Receive

HAL1:  HAL_IRDA_AbortReceive(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_AbortReceive(hal_uart_handle_t *huart)

Abort IT

HAL1:  HAL_IRDA_Abort_IT(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_Abort_IT(hal_uart_handle_t *huart)

Abort Transmit IT

HAL1:  HAL_IRDA_AbortTransmit_IT(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_AbortTransmit_IT(hal_uart_handle_t *huart)

Abort Receive IT

HAL1:  HAL_IRDA_AbortReceive_IT(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_AbortReceive_IT(hal_uart_handle_t *huart)

IRQ handler

Function

HAL1 / HAL2

IRQ Handler

HAL1:  HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_IRQHandler(hal_uart_handle_t *huart)

Register callbacks

HAL1

HAL2

In HAL1, the function HAL_IRAD_RegisterCallback() is used to register various IRDA callbacks using a single function with a specific callback ID.

In HAL2, separate functions are available to register each specific IRDA callback, providing more granularity and control over the callback registration process.

// Register Tx Half Complete Callback
HAL_IRDA_RegisterCallback(&irda_handle,
                          HAL_IRDA_TX_HALFCOMPLETE_CB_ID,
                          TxHalfTransferCpltCallback);

// Register Tx Complete Callback
HAL_IRDA_RegisterCallback(&irda_handle,
                          HAL_IRDA_TX_COMPLETE_CB_ID,
                          TxTransferCpltCallback);

// Register Rx Half Complete Callback
HAL_IRDA_RegisterCallback(&irda_handle,
                          HAL_IRDA_RX_HALFCOMPLETE_CB_ID,
                          RxHalfTransferCpltCallback);

// Register Rx Complete Callback
HAL_IRDA_RegisterCallback(&irda_handle,
                          HAL_IRDA_RX_COMPLETE_CB_ID,
                          RxTransferCpltCallback);

// Register Error Callback
HAL_IRDA_RegisterCallback(&irda_handle,
                          HAL_IRDA_ERROR_CB_ID,
                          ErrorCallback);

// Register Abort Complete Callback
HAL_IRDA_RegisterCallback(&irda_handle,
                          HAL_IRDA_ABORT_COMPLETE_CB_ID,
                          AbortCpltCallback);

// Register Abort Transmit Complete Callback
HAL_IRDA_RegisterCallback(&irda_handle,
                          HAL_IRDA_ABORT_TRANSMIT_COMPLETE_CB_ID,
                          AbortTransmitCpltCallback);

// Register Abort Receive Complete Callback
HAL_IRDA_RegisterCallback(&irda_handle,
                          HAL_IRDA_ABORT_RECEIVE_COMPLETE_CB_ID,
                          AbortReceiveCpltCallback);
// Register Tx Half Complete Callback
HAL_UART_RegisterTxHalfCpltCallback(&huart_handle, TxHalfTransferCpltCallback);



// Register Tx Complete Callback
HAL_UART_RegisterTxCpltCallback(&huart_handle, TxTransferCpltCallback);



// Register Rx Half Complete Callback
HAL_UART_RegisterRxHalfCpltCallback(&huart_handle, RxHalfTransferCpltCallback);



// Register Rx Complete Callback
HAL_UART_RegisterRxCpltCallback(&huart_handle, RxTransferCpltCallback);



// Register Error Callback
HAL_UART_RegisterErrorCallback(&huart_handle, ErrorCallback);



// Register Abort Complete Callback
HAL_UART_RegisterAbortCpltCallback(&huart_handle, AbortCpltCallback);



// Register Abort Transmit Complete Callback
HAL_UART_RegisterAbortTransmitCpltCallback(&huart_handle, AbortTransmitCpltCallback);



// Register Abort Receive Complete Callback
HAL_UART_RegisterAbortReceiveCpltCallback(&huart_handle, AbortReceiveCpltCallback);

Related concepts: Individual callback registration APIs replace global register and unregister functions


UnRegister Callbacks

In HAL2, the unregister callback API has been removed. Instead, users can manage callbacks by re-registering the default HAL UART weak callbacks as needed.

HAL1

HAL2

// Unregister Tx Half Complete Callback
HAL_IRDA_UnRegisterCallback(&irda_handle,
                            HAL_IRDA_TX_HALFCOMPLETE_CB_ID);

// Unregister Tx Complete Callback
HAL_IRDA_UnRegisterCallback(&irda_handle,
                            HAL_IRDA_TX_COMPLETE_CB_ID);

// Unregister Rx Half Complete Callback
HAL_IRDA_UnRegisterCallback(&irda_handle,
                            HAL_IRDA_RX_HALFCOMPLETE_CB_ID);

// Unregister Rx Complete Callback
HAL_IRDA_UnRegisterCallback(&irda_handle,
                            HAL_IRDA_RX_COMPLETE_CB_ID);

// Unregister Error Callback
HAL_IRDA_UnRegisterCallback(&irda_handle,
                            HAL_IRDA_ERROR_CB_ID);

// Unregister Abort Complete Callback
HAL_IRDA_UnRegisterCallback(&irda_handle,
                            HAL_IRDA_ABORT_COMPLETE_CB_ID);

// Unregister Abort Transmit Complete Callback
HAL_IRDA_UnRegisterCallback(&irda_handle,
                            HAL_IRDA_ABORT_TRANSMIT_COMPLETE_CB_ID);

// Unregister Abort Receive Complete Callback
HAL_IRDA_UnRegisterCallback(&irda_handle,
                            HAL_IRDA_ABORT_RECEIVE_COMPLETE_CB_ID);
// Re-register default Tx Half Complete Callback
HAL_UART_RegisterTxHalfCpltCallback(&huart_handle,
                                    HAL_UART_TxHalfCpltCallback);

// Re-register default Tx Complete Callback
HAL_UART_RegisterTxCpltCallback(&huart_handle,
                                HAL_UART_TxCpltCallback);

// Re-register default Rx Half Complete Callback
HAL_UART_RegisterRxHalfCpltCallback(&huart_handle,
                                    HAL_UART_RxHalfCpltCallback);

// Re-register default Rx Complete Callback
HAL_UART_RegisterRxCpltCallback(&huart_handle,
                                HAL_UART_RxCpltCallback);

// Re-register default Error Callback
HAL_UART_RegisterErrorCallback(&huart_handle,
                               HAL_UART_ErrorCallback);

// Re-register default Abort Complete Callback
HAL_UART_RegisterAbortCpltCallback(&huart_handle,
                                   HAL_UART_AbortCpltCallback);

// Re-register default Abort Transmit Complete Callback
HAL_UART_RegisterAbortTransmitCpltCallback(&huart_handle,
                                           HAL_UART_AbortTransmitCpltCallback);

// Re-register default Abort Receive Complete Callback
HAL_UART_RegisterAbortReceiveCpltCallback(&huart_handle,
                                          HAL_UART_AbortReceiveCpltCallback);

Related concepts: Individual callback registration APIs replace global register and unregister functions.


Default Callbacks

The following table lists the HAL UART default callback functions, indicating those that remain unchanged between HAL1 and HAL2.

Function

HAL1 / HAL2

TX Half Complete Callback

HAL1:  HAL_IRDA_TxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_TxHalfCpltCallback(hal_uart_handle_t *huart)

TX Complete Callback

HAL1:  HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_TxCpltCallback(hal_uart_handle_t *huart)

RX Half Complete Callback

HAL1:  HAL_IRDA_RxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_RxHalfCpltCallback(hal_uart_handle_t *huart)

RX Complete Callback

HAL1:  HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda)
HAL2:  void HAL_UART_RxCpltCallback(hal_uart_handle_t *huart, uint32_t size_byte,
                                   hal_uart_rx_event_types_t rx_event)

Error Callback

HAL1:  HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_ErrorCallback(hal_uart_handle_t *huart)

Abort Complete Callback

HAL1:  HAL_IRDA_AbortCpltCallback(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_AbortCpltCallback(hal_uart_handle_t *huart)

Abort Transmit Complete Callback

HAL1:  HAL_IRDA_AbortTransmitCpltCallback(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_AbortTransmitCpltCallback(hal_uart_handle_t *huart)

Abort Receive Complete Callback

HAL1:  HAL_IRDA_AbortReceiveCpltCallback(IRDA_HandleTypeDef *hirda)
HAL2:  HAL_UART_AbortReceiveCpltCallback(hal_uart_handle_t *huart)